<script>
  const INT_MIN = -Math.pow(2, 31);
  const INT_MAX = Math.pow(2, 31) - 1;
  console.log(true ^ true);
  console.log(3 << 1);
  console.log(Math.abs(-2));
  console.log(INT_MIN);
  console.log(INT_MAX);
  console.log(1 << 31);
  console.log(Math.sqrt(8));
  /**
   * @param {number} dividend
   * @param {number} divisor
   * @return {number}
   */
  var divide = function (a, b) {
    const INT_MIN = -Math.pow(2, 31);
    const INT_MAX = Math.pow(2, 31) - 1;

    if (a == INT_MIN && b == -1) return INT_MAX;

    let res = 0;
    if (b == INT_MIN) {
      return a == b ? 1 : 0;
    }

    // 被除数先减去一个除数
    // 所以 --为 +
    if (a == INT_MIN) {
      a -= -Math.abs(b);
      res += 1;
    }
    // true true 0  true false 1
    const sign = (a > 0) ^ (b > 0) ? -1 : 1;
    // 转化为 正数做
    a = Math.abs(a);
    b = Math.abs(b);

    for (let i = 31; i >= 0; i--) {
      // >>> 无符号位移 31 位 a 如果位负数 所以考虑使用 >>>
      if ((a >>> i) - b >= 0) {
        a = a - (b << i);
        // 如果res 大于 INT_MAX
        if (res > INT_MAX - (1 << i)) {
          return INT_MIN;
        }
        res += 1 << i;
      }
    }

    if (res === -2147483648) return -2147483648;
    return sign > 0 ? res : -res;
  };
</script>
